package com.vic.designpattern.patterns.c_behavioral.state.demo3;

/**
 * @author victor
 */
public abstract class AbstractState {

    /**
     * 环境类
     * 切换状态类时会用到
     */
    ScoreContext hj;

    /**
     * 状态名称
     */
    protected String stateName;

    /**
     * 分数
     */
    protected int score;

    /**
     * 调整当前状态
     */
    public abstract void adjustState();

    /**
     * 加分数
     * @param score
     */
    public void addScore(int score) {
        this.score += score;
        System.out.print("加上：" + score + "分，\t当前分数：" + this.score);
        // 分数变更，调整当前状态
        adjustState();
        // this.stateName 表示的是调用者的状态，也即是上一个状态。在 adjustState 之后，环境类中的state已经调整，所以这里取环境类中的state
        System.out.println("分，\t当前状态：" + this.hj.getState().stateName);
    }
}
